Deref trait
dereferenceした際にどの型になるかを指定する
定義
code:rs
trait Deref {
type Target: ?Sized;
fn deref(&self) -> &Self::Target;
}
*TするとTargetの型になる
たぶんどこかでderef()を*にoperator overloadしてるのだろうmrsekut.icon
実装例
Vec
code:rs
impl<T, A: Allocator> ops::Deref for Vec<T, A> {
self.as_slice()
}
}
Box
code:rs
impl<T: ?Sized, A: Allocator> Deref for Box<T, A> {
type Target = T;
fn deref(&self) -> &T {
&**self
}
}
code:rs
fn main() {
let x = Box::new(42);
// Derefトレイトにより、Box<T>の中身にアクセスできる
println!("{}", *x); // 出力: 42
}
関連
code:rs
trait DerefMut: Deref {
fn deref_mut(&mut self) -> &mut Self::Target;
}